package com.anyou.common.utils.uuid;

import org.apache.commons.lang3.RandomStringUtils;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Random;

/**
 * @author liqipeng
 * @Description 随机工具类
 * @date 2020-08-10
 */
public class RandomKit {

    /**
     * 订单默认长度
     */
    private static final int ORDER_DEFAULT_LENGTH = 18;

    /**
     * 源字符生成，可以根据需要删减，例如去掉1和i及l ，0和o
     */
    private static final String CODE = "23456789abcdefghkmnpqrstuvwxyz";

    /**
     * 生成随机码（数字+字母）
     *
     * @param length 长度
     * @return 随机码
     */
    public static String genRandomCode(int length) {
        String genSource = CODE;
        String temStr;
        StringBuffer sb = new StringBuffer();
        for (int i = 0; i < length; i++) {
            // 循环随机获得当次字符，并移走选出的字符
            temStr = String.valueOf(genSource.charAt((int) Math.floor(Math.random() * genSource.length())));
            sb.append(temStr);
            genSource = genSource.replaceAll(temStr, StringKit.NULL_STR);
        }
        return sb.toString();
    }

    /**
     * 生成指定len位的随机数
     *
     * @param length 长度（最大8位）
     * @return 随机数
     */
    public static String genCount(int length) {
        Double db = Math.random();
        return db.toString().substring(2, length + 2);
    }

    /**
     * 生成18位数订单号
     *
     * @return 订单号
     */
    public static String genOrderId() {
        StringBuffer sb = new StringBuffer();
        SimpleDateFormat sdf = new SimpleDateFormat("yyMMddHHmmss");
        sb.append(sdf.format(new Date()));
        sb.append(genCount(6));
        return sb.toString();
    }

    /**
     * 生成指定位数订单号(最低18位)
     *
     * @param length 长度
     * @return 订单号
     */
    public static String genOrderId(int length) {
        String orderId = genOrderId();
        if (length <= ORDER_DEFAULT_LENGTH) {

            return orderId;
        }
        StringBuffer sb = new StringBuffer();
        sb.append(orderId);
        sb.append(RandomStringUtils.randomNumeric(length - ORDER_DEFAULT_LENGTH));
        return sb.toString();
    }

    /**
     * 生成13位时间戳
     *
     * @return 数
     */
    public static Long genNumber() {
        return System.currentTimeMillis();
    }

    /**
     * 生成10为时间戳
     *
     * @return 数
     */
    public static Long getTimeStamp() {
        return System.currentTimeMillis() / 1000;
    }
    /**
     * 随机生成6位数字
     *
     * @return 数
     */
    public static int getNum6() {
        Random random = new Random();
        int randomNumber = random.nextInt(1000000) + 100000;
        return randomNumber;
    }

    public static void main(String[] args) {
        System.out.println(getNum6());
    }
}
